package com.koron.sinoprobe.web.plan.bean.entity;

import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.koron.sinoprobe.web.common.Sortable;
import com.koron.sinoprobe.web.common.UpdateParameter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

@Data
@ApiModel(description = "专项项目/计划-里程碑")
public class SpPlanMilestone implements Serializable, UpdateParameter, Sortable {
    private static final long serialVersionUID = 280979456396080109L;

    @ApiModelProperty("主键")
    private String id;

    @ApiModelProperty("计划id或项目id")
    private String spId;

    @ApiModelProperty("里程碑节点")
    private String name;

    @ApiModelProperty("计划开始时间，yyyy-mm-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date expectStartTime;

    @ApiModelProperty("计划结束时间，节点时间，yyyy-mm-dd、节点最后期限")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date expectEndTime;

    @ApiModelProperty("实际开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date factStartTime;

    @ApiModelProperty("实际结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date factEndTime;

    @ApiModelProperty("里程碑状态：专项管理.sp_milestone_status")
    private String status;

    @ApiModelProperty("完成进度，单位：%")
    private Integer progress;

    @ApiModelProperty("顺序")
    private Integer sort;

    @ApiModelProperty(value = "创建人账号")
    private String createBy;

    @ApiModelProperty(value = "创建人姓名")
    private String createByName;

    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    @ApiModelProperty(value = "更新人账号")
    private String updateBy;

    @ApiModelProperty(value = "更新人姓名")
    private String updateByName;

    @ApiModelProperty(value = "更新时间")
    private Date updateTime;

    @ApiModelProperty("更新状态标识")
    private Boolean updateFlag;

    // 专项台账列表页面，项目状态修改为当前状态，根据项目汇报中的项目进度计算。（状态，正常，滞后）

    /**
     * 里程碑状态（滞后、填报延期、正常）计算规则：
     *  1、如果当前实际结束时间为空，则取当天时间和计划结束时间做对比。如果当前时间大于计划结束时间则是滞后，反之正常。
     *  2、如果当前实际结束时间不为空，那实际结束时间和计划结束时间对比。如果实际结束时间大于计划结束时间则是滞后，反之正常、
     *  3、如果更新时间大于计划结束时间则是填报延期
     * @return
     */
    public String getStatus() {

        if (this.expectEndTime == null){
            return null;
        }
        String currDate = DateUtil.format(new Date(), "yyyy-MM-dd");
        String expectedEndDate = DateUtil.format(expectEndTime, "yyyy-MM-dd");
        if (factEndTime == null) {
            return currDate.compareTo(expectedEndDate) < 0 ? "正常" : "滞后";
        } else {
            String factEndDate = DateUtil.format(factEndTime, "yyyy-MM-dd");
            if (factEndDate.compareTo(expectedEndDate)<=0) {
                String updateDate = DateUtil.format(updateTime, "yyyy-MM-dd");
                if (updateTime != null && updateDate.compareTo(expectedEndDate)>0) {
                    return "填报延期";
                } else {
                    return "正常";
                }
            } else {
                return "滞后";
            }
        }
    }

}
